/**
*
*/
package ui;
import javax.swing.*;
import java.util.*;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
import model.Dictionary;
/**
* @author Lorand
*
*/
public class GUI implements ActionListener {
private JFrame Frm;
private JMenuBar meniu;
private JMenu Dictionars;
private JMenu search;
private JMenu isConsistent;
private JMenuItem showDictionars;
private JMenuItem insertDictionar;
private JMenuItem deleteDictionar;
private JMenuItem updateDictionar;
private JMenuItem searchCat;
private JMenuItem sConsistent;
private JScrollPane scrollPane;
private JTable table;
private JLabel insertWord;
private JLabel insertSynonym;
private JLabel insertNewSynonym;
private JLabel inserare;
private JLabel actualizare;
private JTextPane actualizareNota;
private JTextPane consistent;
private JTextPane consistentaNota;
private JLabel stergere;
private JLabel cautare;
private JTextField insertWordText;
private JTextField insertSynonymText;
private JTextField insertNewSynonymText;
private JButton insertButton;
private JButton updateButton;
private JButton deleteButton;
private JButton searchButton;
protected Dictionary dictionary;
public GUI() {
i();
}
private void i() {
Frm = new JFrame("Synonyms Dictionary");
Frm.setBounds(200, 30, 500, 400);
Frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frm.getContentPane().setLayout(null);
meniu = new JMenuBar();
Frm.setJMenuBar(meniu);
scrollPane = new JScrollPane();
Dictionars = new JMenu("Dictionary");
Dictionars.setMnemonic(KeyEvent.VK_F);
meniu.add(Dictionars);
showDictionars = new JMenuItem("Dictionary");
showDictionars.setMnemonic(KeyEvent.VK_E);
showDictionars.addActionListener(this);
Dictionars.add(showDictionars);
insertDictionar = new JMenuItem("Add word");
insertDictionar.setMnemonic(KeyEvent.VK_E);
insertDictionar.addActionListener(this);
Dictionars.add(insertDictionar);
updateDictionar = new JMenuItem("Update word");
updateDictionar.setMnemonic(KeyEvent.VK_E);
updateDictionar.addActionListener(this);
Dictionars.add(updateDictionar);
deleteDictionar = new JMenuItem("Delete word");
deleteDictionar.setMnemonic(KeyEvent.VK_E);
deleteDictionar.addActionListener(this);
Dictionars.add(deleteDictionar);
insertSynonym = new JLabel("Synonym");
insertSynonym.setVisible(false);
insertSynonym.setBounds(40, 170, 100, 20);
Frm.getContentPane().add(insertSynonym);
insertWord = new JLabel("Word");
insertWord.setVisible(false);
insertWord.setBounds(40, 130, 100, 20);
Frm.getContentPane().add(insertWord);
inserare = new JLabel("Please insert the word and his synonym!");
inserare.setVisible(false);
inserare.setBounds(60, 40, 500, 50);
Frm.getContentPane().add(inserare);
insertSynonymText = new JTextField();
insertSynonymText.setVisible(false);
insertSynonymText.setBounds(115, 170, 150, 30);
Frm.getContentPane().add(insertSynonymText);
insertWordText = new JTextField();
insertWordText.setVisible(false);
insertWordText.setBounds(115, 130, 150, 30);
Frm.getContentPane().add(insertWordText);
insertButton = new JButton("Insert");
insertButton.setBounds(200, 225, 120, 30);
insertButton.setVisible(false);
insertButton.setMnemonic(KeyEvent.VK_E);
insertButton.addActionListener(this);
Frm.getContentPane().add(insertButton);
actualizare = new JLabel("Insert the word which you want to update!");
actualizare.setVisible(false);
actualizare.setBounds(60, 40, 500, 50);
Frm.getContentPane().add(actualizare);
actualizareNota = new JTextPane();
actualizareNota.setText(
"! Pentru a actualiza un cuvant din dictionar e nevoie de introduceti cuvantul la care doriti sa ii schimbati sinonimul, sinonimul vechi din dictionar si sinonimul nou");
actualizareNota.setVisible(false);
actualizareNota.setBounds(10, 285, 440, 100);
actualizareNota.setOpaque(false);
Frm.getContentPane().add(actualizareNota);
updateButton = new JButton("Update");
updateButton.setBounds(200, 250, 120, 30);
updateButton.setVisible(false);
updateButton.setMnemonic(KeyEvent.VK_E);
updateButton.addActionListener(this);
Frm.getContentPane().add(updateButton);
insertNewSynonym = new JLabel("New synonym");
insertNewSynonym.setVisible(false);
insertNewSynonym.setBounds(40, 210, 100, 20);
Frm.getContentPane().add(insertNewSynonym);
insertNewSynonymText = new JTextField();
insertNewSynonymText.setVisible(false);
insertNewSynonymText.setBounds(115, 210, 150, 30);
Frm.getContentPane().add(insertNewSynonymText);
deleteButton = new JButton("Delete");
deleteButton.setBounds(200, 250, 120, 30);
deleteButton.setVisible(false);
deleteButton.setMnemonic(KeyEvent.VK_E);
deleteButton.addActionListener(this);
Frm.getContentPane().add(deleteButton);
stergere = new JLabel("Write the word which you want to delete from the dictionary");
stergere.setVisible(false);
stergere.setBounds(60, 40, 500, 50);
Frm.getContentPane().add(stergere);
search = new JMenu("Search");
search.setMnemonic(KeyEvent.VK_F);
meniu.add(search);
searchCat = new JMenuItem("Search word");
searchCat.setMnemonic(KeyEvent.VK_E);
searchCat.addActionListener(this);
search.add(searchCat);
searchButton = new JButton("Search");
searchButton.setBounds(200, 250, 120, 30);
searchButton.setVisible(false);
searchButton.setMnemonic(KeyEvent.VK_E);
searchButton.addActionListener(this);
Frm.getContentPane().add(searchButton);
cautare = new JLabel("Insert what you want to search");
cautare.setVisible(false);
cautare.setBounds(60, 40, 500, 50);
Frm.getContentPane().add(cautare);
isConsistent = new JMenu("Properties");
isConsistent.setMnemonic(KeyEvent.VK_F);
isConsistent.addActionListener(this);
sConsistent = new JMenuItem("It is consistent?");
sConsistent.setMnemonic(KeyEvent.VK_E);
sConsistent.addActionListener(this);
isConsistent.add(sConsistent);
consistent = new JTextPane();
consistent.setVisible(false);
consistent.setBounds(60, 120, 440, 100);
consistent.setOpaque(false);
Frm.getContentPane().add(consistent);
consistentaNota = new JTextPane();
consistentaNota.setText(
"!Un dictionar este consistent atunci cand putem gasi cuvant=sinonim si sinonim= cuvant. De exemplu: trist=suparat, dar si suparat=trist");
consistentaNota.setVisible(false);
consistentaNota.setBounds(10, 285, 440, 100);
consistentaNota.setOpaque(false);
Frm.getContentPane().add(consistentaNota);
meniu.add(isConsistent);
dictionary = Dictionary.getInstance();
dictionary.readsynonyms();
Frm.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == showDictionars) {
clearScreen();
table = showSynonyms();
scrollPane = new JScrollPane(table);
scrollPane.setBounds(85, 60, 300, 270);
scrollPane.setVisible(true);
Frm.getContentPane().add(scrollPane);
}
if (e.getSource() == insertDictionar) {
clearScreen();
insertWord.setVisible(true);
insertSynonym.setVisible(true);
inserare.setVisible(true);
insertWordText.setVisible(true);
insertSynonymText.setVisible(true);
insertButton.setVisible(true);
}
if (e.getSource() == insertButton) {
String word = insertWordText.getText();
String synonym = insertSynonymText.getText();
dictionary.addsysnonyms(word, synonym);
dictionary.writesynonyms();
}
if (e.getSource() == updateDictionar) {
clearScreen();
insertWord.setVisible(true);
insertSynonym.setVisible(true);
insertNewSynonym.setVisible(true);
insertWordText.setVisible(true);
insertSynonymText.setVisible(true);
insertNewSynonymText.setVisible(true);
actualizare.setVisible(true);
actualizareNota.setVisible(true);
updateButton.setVisible(true);
}
if (e.getSource() == updateButton) {
String word = insertWordText.getText();
String oldSynonym = insertSynonymText.getText();
String newSynonym = insertNewSynonymText.getText();
dictionary.updatesynonyms(word, oldSynonym, newSynonym);
dictionary.writesynonyms();
}
if (e.getSource() == deleteDictionar) {
clearScreen();
insertWord.setVisible(true);
insertWordText.setVisible(true);
deleteButton.setVisible(true);
stergere.setVisible(true);
}
if (e.getSource() == deleteButton) {
String word = insertWordText.getText();
dictionary.deletesysnonyms(word);
dictionary.writesynonyms();
}
if (e.getSource() == searchCat) {
clearScreen();
insertWord.setVisible(true);
insertWordText.setVisible(true);
searchButton.setVisible(true);
cautare.setVisible(true);
}
if (e.getSource() == searchButton) {
table = search(insertWordText.getText());
if (table == null) {
JOptionPane.showMessageDialog(null, "Word does not exist");
} else {
clearScreen();
scrollPane = new JScrollPane(table);
scrollPane.setBounds(85, 60, 300, 100);
scrollPane.setVisible(true);
Frm.getContentPane().add(scrollPane);
}
}
if (e.getSource() == sConsistent) {
clearScreen();
consistentaNota.setVisible(true);
if (dictionary.isConsistent() == true) {
consistent.setVisible(true);
consistent.setText("The dictionary is consistent");
} else {
consistent.setVisible(true);
consistent.setText("The dictionary is not consistent");
}
}
}
protected DefaultTableModel buildTableModel(Dictionary dictionary) {
Vector<String> columnNames = new Vector<String>();
columnNames.add("Word");
columnNames.add("Synonym");
Vector<Vector<Object>> rowData = new Vector<Vector<Object>>();
Set<Map.Entry<String, String>> entrySet = dictionary.dictionary.entrySet();
Iterator<Map.Entry<String, String>> i = entrySet.iterator();
while (i.hasNext()) {
Map.Entry<String, String> word = i.next();
String key = word.getKey();
String value = word.getValue();
Vector<Object> list = new Vector<Object>();
list.add(key);
list.add(value);
rowData.add(list);
}
return new DefaultTableModel(rowData, columnNames);
}
private JTable showSynonyms() {
JTable table = new JTable(buildTableModel(dictionary));
table.setPreferredScrollableViewportSize(table.getPreferredSize());
return table;
}
private JTable search(String word) {
JTable table;
Vector<String> columnNames = new Vector<String>();
columnNames.add("Word");
columnNames.add("Synonym");
Vector<Vector<Object>> rowData = new Vector<Vector<Object>>();
String searchedWord = word;
searchedWord = searchedWord.replace("*", ".*");
searchedWord = searchedWord.replace("?", ".?");
Iterator<String> i = dictionary.dictionary.keySet().iterator();
while (i.hasNext()) {
String key = i.next();
if (key.matches(searchedWord)) {
Vector<Object> list = new Vector<Object>();
String value = dictionary.dictionary.get(key);
list.add(key);
list.add(value);
rowData.add(list);
}
}
if (rowData.size() == 0)
return null;
table = new JTable(new DefaultTableModel(rowData, columnNames));
table.setPreferredScrollableViewportSize(table.getPreferredSize());
return table;
}
private void clearScreen() {
scrollPane.setVisible(false);
insertWord.setVisible(false);
insertSynonym.setVisible(false);
inserare.setVisible(false);
insertWordText.setVisible(false);
insertSynonymText.setVisible(false);
insertButton.setVisible(false);
insertNewSynonym.setVisible(false);
insertNewSynonymText.setVisible(false);
actualizare.setVisible(false);
actualizareNota.setVisible(false);
updateButton.setVisible(false);
deleteButton.setVisible(false);
stergere.setVisible(false);
searchButton.setVisible(false);
cautare.setVisible(false);
consistent.setVisible(false);
consistentaNota.setVisible(false);
}
}